// 版权所有 (c) GoFrame (https://goframe.org)，保留所有权利。
//
// 本源代码遵循MIT许可协议。若未随此文件分发MIT许可证的副本，
// 您可以从 https://github.com/gogf/gf 获取。
// md5:c14c707c81272457

package gmetric

import (
	gjson "gitee.com/go_888/goframe/encoding/gjson"
	gcode "gitee.com/go_888/goframe/errors/gcode"
	gerror "gitee.com/go_888/goframe/errors/gerror"
	gregex "gitee.com/go_888/goframe/text/gregex"
)

// localMetric 实现了 Metric 接口。 md5:1d7e92821badcf91
type localMetric struct {
	MetricInfo
}

// newMetric 创建并返回一个实现Metric接口的对象。 md5:566502ff9b514701
func (meter *localMeter) newMetric(
	metricType X类型_MetricType, metricName string, metricOption X结构_MetricOption,
) (Metric, error) {
	if metricName == "" {
		return nil, gerror.X创建错误码并格式化(
			gcode.X变量_CodeInvalidParameter,
			`创建 %s 指标时名称为空，选项: %s`,
			metricType, gjson.X变量到json文本PANI(metricOption),
		)
	}
	if !gregex.X是否匹配文本(X常量_MetricNamePattern, metricName) {
		return nil, gerror.X创建错误码并格式化(
			gcode.X变量_CodeInvalidParameter,
			`无效的指标名称 "%s"，应匹配正则表达式模式 "%s"`,
			metricName, X常量_MetricNamePattern,
		)
	}
	return &localMetric{
		MetricInfo: meter.newMetricInfo(metricType, metricName, metricOption),
	}, nil
}

// Info 返回一个Metric的基本信息。 md5:d521e5fdeb6e591f
func (l *localMetric) Info() MetricInfo {
	return l.MetricInfo
}
